////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  abf_4_0_0.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef ABF_4_0_0_H
#define ABF_4_0_0_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "ispglobalelements.h"

#define ABF_4_0_0_NAMESPACE_BEGIN namespace abf_4_0_0 {
#define ABF_4_0_0_NAMESPACE_END }

ABF_4_0_0_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// abf40_rgn_dataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct abf40_rgn_dataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// minmax_maxshft
    ///
    /// Tuning Level:  often_tune
    /// Description:   upper/lower offset (as right-shifting) used in single bpc applied to neighbor pixels
    /// Default Value: 3
    /// Range:         [0, 15]
    /// Bit Depth:     4u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        minmax_maxshft;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// minmax_minshft
    ///
    /// Tuning Level:  often_tune
    /// Description:   upper/lower offset (as right-shifting) used in single bpc applied to neighbor pixels
    /// Default Value: 3
    /// Range:         [0, 15]
    /// Bit Depth:     4u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        minmax_minshft;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// minmax_offset
    ///
    /// Tuning Level:  often_tune
    /// Description:   common absolute offset value used in single bpc applied to both center pixel and neighboring pixel
    /// Default Value: 64
    /// Range:         [0, 4095]
    /// Bit Depth:     12u
    /// Conversion:    No Conversion needed
    /// Notes:         Q0 precision
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        minmax_offset;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// minmax_bls
    ///
    /// Tuning Level:  often_tune
    /// Description:   black level used in single bpc applied to both center pixel and neighboring pixel
    /// Default Value: 0
    /// Range:         [0, 4095]
    /// Bit Depth:     12 bit unsigned
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        minmax_bls;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// blkpix_lev_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   block matching or pixel matching selection. Value 0 means block matching in determining filter
    ///                coefficient. Value 4 means pixel matching
    /// Default Value: 0 0
    /// Range:         [0, 4]
    /// Bit Depth:     3u
    /// Length:        2
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct blkpix_lev_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// blkpix_lev - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 0 0
        /// Length:        2
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT blkpix_lev[2];
    } blkpix_lev_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// noise_std_lut_tab
    ///
    /// Tuning Level:  must_tune
    /// Description:   noise profile (std) that will be used together with edge_softness to generate noise_std_dev_lut in packed
    ///                format
    /// Default Value: 0 6 9 11 12 14 15 16 18 19 20 21 22 23 24 24 25 26 27 27 28 29 30 30 31 32 32 33 33 34 35 35 36 36 37 37 38 39 39 40 40 41 41 42 42 43 43 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
    /// Range:         [0.0, 512.0]
    /// Bit Depth:     float
    /// Length:        65
    /// Notes:         The above conversion starts with 8996 ABF noise profile
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct noise_std_lut_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// noise_std_lut - Array
        ///
        /// Tuning Level:  must_tune
        /// Default Value: 0 6 9 11 12 14 15 16 18 19 20 21 22 23 24 24 25 26 27 27 28 29 30 30 31 32 32 33 33 34 35 35 36 36 37 37 38 39 39 40 40 41 41 42 42 43 43 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
        /// Length:        65
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT noise_std_lut[65];
    } noise_std_lut_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// curve_offset_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   offset that is subtracted from normalized difference before generating bilateral coefficients
    /// Default Value: 0 0 0 0
    /// Range:         [0, 127]
    /// Bit Depth:      7u
    /// Length:        4
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct curve_offset_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// curve_offset - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 0 0 0 0
        /// Length:        4
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT curve_offset[4];
    } curve_offset_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// dist_ker_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   bit shifting value corresponding to distance weight; [0-2][] -- 3 smoothing levels, [][0-2,R/B,
    ///                3-5,Gr/Gb] non-zero value n means 1-shift-left-(n-1); zero value means weight of 0.
    /// Default Value: 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1
    /// Range:         [[1,4],[0,2],[0,1],[1,4],[0,2],[0,1],[1,4],[0,2],[0,1],[1,4],[0,2],[0,1],[1,4],[0,2],[0,1],[1,4],[0,2],[0,1]]
    /// Bit Depth:     [][0]:3bit; othes:2bit
    /// Length:        3x6
    /// Notes:         range:[0]:1-4; [1]:0-2; [2]:0-2
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct dist_ker_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// dist_ker - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1
        /// Length:        18
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT dist_ker[18];
    } dist_ker_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// edge_softness_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   control bilateral filter strength together with noise_std_lut
    /// Default Value: 3.0, 3.0, 3.0, 3.0
    /// Range:         [0.0, 15.99]
    /// Bit Depth:     float
    /// Length:        4
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct edge_softness_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// edge_softness - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 3.0, 3.0, 3.0, 3.0
        /// Length:        4
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT edge_softness[4];
    } edge_softness_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// denoise_strength_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   higher means more denoising, one for each channel
    /// Default Value: 1.0, 1.0, 1.0, 1.0 
    /// Range:         [0.0, 1.0]
    /// Length:        4
    /// Notes:         Final_slope = (1 - noise_prsv * radial_adj * act_adj) * denoise_scale
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct denoise_strength_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// denoise_strength - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 1.0, 1.0, 1.0, 1.0 
        /// Length:        4
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT denoise_strength[4];
    } denoise_strength_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// noise_prsv_anchor_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   anchor points for noise_preserve
    /// Default Value: 0 0.0625 0.125 0.8 1
    /// Range:         [0, 1.0]
    /// Bit Depth:     float
    /// Length:        5
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct noise_prsv_anchor_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// noise_prsv_anchor - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 0 0.0625 0.125 0.8 1
        /// Length:        5
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT noise_prsv_anchor[5];
    } noise_prsv_anchor_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// noise_prsv_base_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   base value for noise preserve, [0][] - R/B, [1][] - Gr/Gb
    /// Default Value: 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6
    /// Range:         [0.0, 1.0]
    /// Bit Depth:     float
    /// Length:        10
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct noise_prsv_base_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// noise_prsv_base - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6
        /// Length:        10
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT noise_prsv_base[10];
    } noise_prsv_base_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// radial_edge_softness_adj_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   base value for rnr, used for bilateral
    /// Default Value: 1 1 1 1 1
    /// Range:         [1.0, 15.99]
    /// Bit Depth:     float
    /// Length:        5
    /// Notes:         increasing table
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct radial_edge_softness_adj_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// radial_edge_softness_adj - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 1 1 1 1 1
        /// Length:        5
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT radial_edge_softness_adj[5];
    } radial_edge_softness_adj_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// radial_noise_prsv_adj_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   base value for rnr, used for soft-thresholding
    /// Default Value: 1 1 1 1 1
    /// Range:         [0, 1.0]
    /// Bit Depth:     float
    /// Length:        5
    /// Notes:         decreasing table
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct radial_noise_prsv_adj_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// radial_noise_prsv_adj - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 1 1 1 1 1
        /// Length:        5
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT radial_noise_prsv_adj[5];
    } radial_noise_prsv_adj_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// act_fac_lut_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   LUT for activity adjust
    /// Default Value: 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256
    /// Range:         [0, 256]
    /// Bit Depth:     9u
    /// Length:        32
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct act_fac_lut_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// act_fac_lut - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256
        /// Length:        32
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT act_fac_lut[32];
    } act_fac_lut_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// act_fac0
    ///
    /// Tuning Level:  often_tune
    /// Description:   parameter for activity adjust
    /// Default Value: 2048
    /// Range:         [0, 8191]
    /// Bit Depth:     13u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        act_fac0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// act_fac1
    ///
    /// Tuning Level:  often_tune
    /// Description:   parameter for activity adjust
    /// Default Value: 0
    /// Range:         [0, 8191]
    /// Bit Depth:     13u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        act_fac1;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// act_thd0
    ///
    /// Tuning Level:  often_tune
    /// Description:   parameter for activity adjust
    /// Default Value: 0
    /// Range:         [0, 8191]
    /// Bit Depth:     13u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        act_thd0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// act_thd1
    ///
    /// Tuning Level:  often_tune
    /// Description:   parameter for activity adjust
    /// Default Value: 1
    /// Range:         [1, 4095]
    /// Bit Depth:     13u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        act_thd1;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// act_smth_thd0
    ///
    /// Tuning Level:  often_tune
    /// Description:   parameter for activity adjust
    /// Default Value: 128
    /// Range:         [0, 255]
    /// Bit Depth:     8u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        act_smth_thd0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// act_smth_thd1
    ///
    /// Tuning Level:  often_tune
    /// Description:   parameter for activity adjust
    /// Default Value: 192
    /// Range:         [0, 255]
    /// Bit Depth:     8u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        act_smth_thd1;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// dark_thd
    ///
    /// Tuning Level:  often_tune
    /// Description:   parameter for activity adjust
    /// Default Value: 32
    /// Range:         [0, 4095]
    /// Bit Depth:     12u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        dark_thd;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// dark_fac_lut_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   parameter for dark_factor adjustment
    /// Default Value: 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256
    /// Range:         [0, 256]
    /// Bit Depth:     9u
    /// Length:        42
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct dark_fac_lut_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// dark_fac_lut - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256
        /// Length:        42
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT dark_fac_lut[42];
    } dark_fac_lut_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// edge_detect_thd
    ///
    /// Tuning Level:  often_tune
    /// Description:   parameter for edge_detection
    /// Default Value: 8
    /// Range:         [0, 15]
    /// Bit Depth:     4u
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        edge_detect_thd;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// edge_count_low
    ///
    /// Tuning Level:  often_tune
    /// Description:   parameter for edge_detection
    /// Default Value: 4
    /// Range:         [0, 16]
    /// Bit Depth:     7u
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        edge_count_low;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// edge_detect_noise_scaler
    ///
    /// Tuning Level:  often_tune
    /// Description:   parameter for edge_detection
    /// Default Value: 1
    /// Range:         [0, 63.99]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        edge_detect_noise_scaler;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// edge_smooth_strength
    ///
    /// Tuning Level:  often_tune
    /// Description:   parameter for edge_detection
    /// Default Value: 0.5
    /// Range:         [0, 1.0]
    /// Bit Depth:     float
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                        edge_smooth_strength;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// edge_smooth_scaler_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   parameter for edge_detection
    /// Default Value: 1 1 1 1
    /// Range:         [0, 15.99]
    /// Bit Depth:     float
    /// Length:        4
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct edge_smooth_scaler_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// edge_smooth_scaler - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 1 1 1 1
        /// Length:        4
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT edge_smooth_scaler[4];
    } edge_smooth_scaler_tab;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// mod_abf40_aec_dataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct mod_abf40_aec_dataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// aec_trigger
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    globalelements::trigger_pt_type_aec aec_trigger;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// abf40_rgn_data
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    abf40_rgn_dataType  abf40_rgn_data;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// mod_abf40_hdr_aec_dataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct mod_abf40_hdr_aec_dataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// hdr_aec_trigger
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ispglobalelements::trigger_pt_type_aec_hdr hdr_aec_trigger;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// hdr_aec_data
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct hdr_aec_dataStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// mod_abf40_aec_data - Array
        /// Min Length:    1
        /// Max Length:    Unbounded
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32                  mod_abf40_aec_dataCount;
        UINT32                  mod_abf40_aec_dataID;
        mod_abf40_aec_dataType* mod_abf40_aec_data;
    } hdr_aec_data;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// mod_abf40_drc_gain_dataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct mod_abf40_drc_gain_dataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// drc_gain_trigger
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ispglobalelements::trigger_pt_type drc_gain_trigger;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// drc_gain_data
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct drc_gain_dataStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// mod_abf40_hdr_aec_data - Array
        /// Min Length:    1
        /// Max Length:    Unbounded
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32                      mod_abf40_hdr_aec_dataCount;
        UINT32                      mod_abf40_hdr_aec_dataID;
        mod_abf40_hdr_aec_dataType* mod_abf40_hdr_aec_data;
    } drc_gain_data;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_abf40_coreType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatix_abf40_coreType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// mod_abf40_drc_gain_data - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                       mod_abf40_drc_gain_dataCount;
    UINT32                       mod_abf40_drc_gain_dataID;
    mod_abf40_drc_gain_dataType* mod_abf40_drc_gain_data;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_abf40_reserveType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatix_abf40_reserveType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// cross_plane_en
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   enable Gr/Gb cross processing in bilateral filtering
    /// Default Value: 1
    /// Range:         [0,1]
    /// Bit Depth:     1u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    globalelements::enable_flag_type  cross_plane_en;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// dark_desat_en
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   enable dark desaturation feature, tier 2 enable
    /// Default Value: 0
    /// Range:         [0,1]
    /// Bit Depth:     1u
    /// Conversion:    No Conversion needed
    /// Notes:         Effective when bilateral_en is on.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    globalelements::enable_flag_type  dark_desat_en;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// dark_smooth_en
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   enable dark area smoothing feature, tier 2 enable
    /// Default Value: 0
    /// Range:         [0,1]
    /// Bit Depth:     1u
    /// Conversion:    No Conversion needed
    /// Notes:         Effective when bilateral_en is on.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    globalelements::enable_flag_type  dark_smooth_en;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// act_adj_en
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   enable activity based adjustment feature, tier 2 enable
    /// Default Value: 0
    /// Range:         [0,1]
    /// Bit Depth:     1u
    /// Conversion:    No Conversion needed
    /// Notes:         It is effective only when both bilateral_en and dirsmth_en are set to 1
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    globalelements::enable_flag_type  act_adj_en;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// blk_opt
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   block matching pattern for R/B
    /// Default Value: 0
    /// Range:         [0, 2]
    /// Bit Depth:     2u
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32             blk_opt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// radial_anchor_tab
    ///
    /// Tuning Level:  must_tune
    /// Description:   anchor tables from center to frame boundary
    /// Default Value: 0,0.4,0.6,0.8,1.0
    /// Range:         [0.0, 1.0]
    /// Bit Depth:     float
    /// Length:        5
    /// Conversion:    No Conversion needed
    /// Notes:         rnr_anchor[0] is 0 by default. normally rnr_anchor[4] is 1.0.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct radial_anchor_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// radial_anchor - Array
        ///
        /// Tuning Level:  must_tune
        /// Default Value: 0,0.4,0.6,0.8,1.0
        /// Length:        5
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT radial_anchor[5];
    } radial_anchor_tab;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_abf40Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatix_abf40Type
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enable_section
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct enable_sectionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// bilateral_en
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   enable bilateral filtering, tier 1 enable
        /// Default Value: 1
        /// Range:         [0,1]
        /// Bit Depth:     1u
        /// Conversion:    No Conversion needed
        /// Notes:         none
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        globalelements::enable_flag_type bilateral_en;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// minmax_en
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   enable built-in min-max pixel filter, tier 1 enable
        /// Default Value: 0
        /// Range:         [0,1]
        /// Bit Depth:     1u
        /// Conversion:    No Conversion needed
        /// Notes:         if BPC module is on, this feature is likely off
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        globalelements::enable_flag_type minmax_en;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// dirsmth_en
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   enable Directional Smoothing filter, tier 1 enable
        /// Default Value: 0
        /// Range:         [0,1]
        /// Bit Depth:     1u
        /// Conversion:    No Conversion needed
        /// Notes:         none
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        globalelements::enable_flag_type dirsmth_en;
    } enable_section;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// control_variables
    ///
    /// Default Value: control_drc_gain, control_aec_exp_sensitivity_ratio, control_gain
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct control_variablesStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// control_var_type - Array
        /// Default Value: control_drc_gain, control_aec_exp_sensitivity_ratio, control_gain
        /// Length:        3
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        enum class control_var_typeEnum
        {
            control_drc_gain                  = 0,
            control_exp_time_ratio            = 1,
            control_aec_exp_sensitivity_ratio = 2,
            control_lux_idx                   = 3,
            control_gain                      = 4
        } control_var_type[3];
    } control_variables;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// control_method
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct control_methodStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// aec_exp_control
        /// Default Value: control_gain
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ispglobalelements::tuning_control_aec_type     aec_exp_control;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// aec_hdr_control
        /// Default Value: control_aec_exp_sensitivity_ratio
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ispglobalelements::tuning_control_aec_hdr_type aec_hdr_control;
    } control_method;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// dynamic_enable_triggers
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct dynamic_enable_triggersStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// bilateral_en
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct bilateral_enStruct
        {
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            /// Binary file symbol table entry ID
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            UINT32 SymbolTableID;

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            /// enable
            ///
            /// Tuning Level:  rarely_tune
            /// Description:   enable ABF4.0 module
            /// Default Value: 0
            /// Range:         [0, 1]
            /// Bit Depth:     1u
            /// Notes:         none
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            globalelements::enable_flag_type        enable;

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            /// hyst_control_var
            ///
            /// Tuning Level:  rarely_tune
            /// Description:   enable ABF4.0 module
            /// Default Value: control_gain
            /// Range:         [0, 1]
            /// Bit Depth:     1u
            /// Notes:         none
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            ispglobalelements::control_var_type        hyst_control_var;

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            /// hyst_mode
            /// Default Value: UPWARD
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            ispglobalelements::hyst_direction          hyst_mode;

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            /// hyst_trigger
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            ispglobalelements::trigger_pt_couplet_type hyst_trigger;
        } bilateral_en;
    } dynamic_enable_triggers;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// chromatix_abf40_reserve
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_abf40_reserveType chromatix_abf40_reserve;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// chromatix_abf40_core
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_abf40_coreType    chromatix_abf40_core;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_abf40TypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatix_abf40TypeClass : public ParameterModule, public chromatix_abf40Type
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 4;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_abf40TypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_abf40TypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatix_abf40TypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load abf40_rgn_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadabf40_rgn_dataType(
        ParameterFileSymbolTableEntry* entry,
        abf40_rgn_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load abf40_rgn_dataType_blkpix_lev_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadabf40_rgn_dataType_blkpix_lev_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        abf40_rgn_dataType::blkpix_lev_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load abf40_rgn_dataType_noise_std_lut_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadabf40_rgn_dataType_noise_std_lut_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        abf40_rgn_dataType::noise_std_lut_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load abf40_rgn_dataType_curve_offset_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadabf40_rgn_dataType_curve_offset_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        abf40_rgn_dataType::curve_offset_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load abf40_rgn_dataType_dist_ker_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadabf40_rgn_dataType_dist_ker_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        abf40_rgn_dataType::dist_ker_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load abf40_rgn_dataType_edge_softness_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadabf40_rgn_dataType_edge_softness_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        abf40_rgn_dataType::edge_softness_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load abf40_rgn_dataType_denoise_strength_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadabf40_rgn_dataType_denoise_strength_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        abf40_rgn_dataType::denoise_strength_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load abf40_rgn_dataType_noise_prsv_anchor_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadabf40_rgn_dataType_noise_prsv_anchor_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        abf40_rgn_dataType::noise_prsv_anchor_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load abf40_rgn_dataType_noise_prsv_base_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadabf40_rgn_dataType_noise_prsv_base_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        abf40_rgn_dataType::noise_prsv_base_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load abf40_rgn_dataType_radial_edge_softness_adj_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadabf40_rgn_dataType_radial_edge_softness_adj_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        abf40_rgn_dataType::radial_edge_softness_adj_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load abf40_rgn_dataType_radial_noise_prsv_adj_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadabf40_rgn_dataType_radial_noise_prsv_adj_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        abf40_rgn_dataType::radial_noise_prsv_adj_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load abf40_rgn_dataType_act_fac_lut_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadabf40_rgn_dataType_act_fac_lut_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        abf40_rgn_dataType::act_fac_lut_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load abf40_rgn_dataType_dark_fac_lut_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadabf40_rgn_dataType_dark_fac_lut_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        abf40_rgn_dataType::dark_fac_lut_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load abf40_rgn_dataType_edge_smooth_scaler_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadabf40_rgn_dataType_edge_smooth_scaler_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        abf40_rgn_dataType::edge_smooth_scaler_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load mod_abf40_aec_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmod_abf40_aec_dataType(
        ParameterFileSymbolTableEntry* entry,
        mod_abf40_aec_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load mod_abf40_hdr_aec_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmod_abf40_hdr_aec_dataType(
        ParameterFileSymbolTableEntry* entry,
        mod_abf40_hdr_aec_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load mod_abf40_hdr_aec_dataType_hdr_aec_dataStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmod_abf40_hdr_aec_dataType_hdr_aec_dataStruct(
        ParameterFileSymbolTableEntry* entry,
        mod_abf40_hdr_aec_dataType::hdr_aec_dataStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load mod_abf40_drc_gain_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmod_abf40_drc_gain_dataType(
        ParameterFileSymbolTableEntry* entry,
        mod_abf40_drc_gain_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load mod_abf40_drc_gain_dataType_drc_gain_dataStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmod_abf40_drc_gain_dataType_drc_gain_dataStruct(
        ParameterFileSymbolTableEntry* entry,
        mod_abf40_drc_gain_dataType::drc_gain_dataStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_abf40_coreType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_abf40_coreType(
        ParameterFileSymbolTableEntry* entry,
        chromatix_abf40_coreType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_abf40_reserveType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_abf40_reserveType(
        ParameterFileSymbolTableEntry* entry,
        chromatix_abf40_reserveType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_abf40_reserveType_radial_anchor_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_abf40_reserveType_radial_anchor_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_abf40_reserveType::radial_anchor_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_abf40Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_abf40Type(
        ParameterFileSymbolTableEntry* entry,
        chromatix_abf40Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load enable_sectionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadenable_sectionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_abf40Type::enable_sectionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_abf40Type::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load control_variablesStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadcontrol_variablesStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_abf40Type::control_variablesStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load control_methodStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadcontrol_methodStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_abf40Type::control_methodStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load dynamic_enable_triggersStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loaddynamic_enable_triggersStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_abf40Type::dynamic_enable_triggersStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load dynamic_enable_triggersStruct_bilateral_enStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loaddynamic_enable_triggersStruct_bilateral_enStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_abf40Type::dynamic_enable_triggersStruct::bilateral_enStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload mod_abf40_hdr_aec_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadmod_abf40_hdr_aec_dataType(
        mod_abf40_hdr_aec_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload mod_abf40_hdr_aec_dataType_hdr_aec_dataStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadmod_abf40_hdr_aec_dataType_hdr_aec_dataStruct(
        mod_abf40_hdr_aec_dataType::hdr_aec_dataStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload mod_abf40_drc_gain_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadmod_abf40_drc_gain_dataType(
        mod_abf40_drc_gain_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload mod_abf40_drc_gain_dataType_drc_gain_dataStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadmod_abf40_drc_gain_dataType_drc_gain_dataStruct(
        mod_abf40_drc_gain_dataType::drc_gain_dataStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatix_abf40_coreType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadchromatix_abf40_coreType(
        chromatix_abf40_coreType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatix_abf40Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadchromatix_abf40Type(
        chromatix_abf40Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatix_abf40TypeClass

ABF_4_0_0_NAMESPACE_END
#endif // ABF_4_0_0_H

